package com.zee.wechat.module.menu.controller;

import com.alibaba.fastjson.JSONObject;
import com.zee.wechat.module.menu.entity.Menu;
import com.zee.wechat.module.menu.service.CreatWechatMenuService;
import com.zee.wechat.module.menu.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 菜单Controller
 *
 * @author Zee
 * @date 2020年10月16日
 */
@RestController
@RequestMapping("/wechatMenu")
public class MenuController {
    @Autowired
    private MenuService menuService;
    @Autowired
    private CreatWechatMenuService creatWechatMenuService;

    @RequestMapping("/add-menu")
    @ResponseBody
    public void addMenu(String menuName, String menuType, String menuUrl,
                        String menuKey, String menuId, String hasSubMenu, String wechatId) {
        Map<String, Object> param = new HashMap<>();
        param.put("name", menuName);
        param.put("mType", menuType);
        param.put("url", menuUrl);
        param.put("key", menuKey);
        param.put("code", menuId);
        param.put("hasSubMenu", hasSubMenu);
        param.put("wechatId", wechatId);
        menuService.addMenu(param);

    }

    @RequestMapping("/add-sub-menu")
    @ResponseBody
    public void addSubMenu(String menuName, String menuType, String menuUrl,
                           String menuKey, String menuId, String subMenuId) {
        Map<String, Object> param = new HashMap<>();
        param.put("name", menuName);
        param.put("sType", menuType);
        param.put("url", menuUrl);
        param.put("key", menuKey);
        param.put("code", menuId);
        param.put("subCode", subMenuId);
        menuService.addSubMenu(param);

    }

    /**
     * 查询该公众号下的菜单
     *
     * @param wechatId
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/menu-list")
    @ResponseBody
    public List<Map<String, Object>> queryMenus(String wechatId) {
        List<Map<String, Object>> menus = menuService.queryMenus(wechatId);
        return menus;
    }

    /**
     * 删除主菜单和子菜单
     *
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/delete-menu")
    @ResponseBody
    public void deleteMenu(String code) {
        menuService.deleteMenu(code);
        menuService.deleteAllSubMenu(code);
    }

    /**
     * 删除子菜单
     *
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/delete-sub-menu")
    @ResponseBody
    public String deleteSubMenu(String code) {
        try {
            menuService.deleteSubMenu(code);
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }

    /**
     * 删除所有子菜单
     *
     * @param code
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/delete-all-sub-menu")
    @ResponseBody
    public void deleteAllSubMenu(String code) {

        menuService.deleteAllSubMenu(code);

    }

    /**
     * 通过code查询主菜单
     *
     * @param menuCode
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/query-menu-by-code")
    @ResponseBody
    public Map<String, Object> queryMenuByCode(String menuCode) {
        try {
            Map<String, Object> menu = menuService.queryMenuByCode(menuCode);
            return menu;
        } catch (Exception e) {

            e.printStackTrace();
            return null;
        }
    }

    /**
     * 通过code查询子菜单
     *
     * @param menuCode
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/query-submenu-by-code")
    @ResponseBody
    public Map<String, Object> querySubMenuByCode(String menuCode) {
        Map<String, Object> subMenu = menuService
                .querySubMenuByCode(menuCode);
        return subMenu;
    }

    /**
     * 修改主菜单
     *
     * @param menuName
     * @param menuType
     * @param menuUrl
     * @param menuKey
     * @param menuCode
     * @param hasSubMenu
     * @param wechatId
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/update-menu")
    @ResponseBody
    public void updateMenu(String menuName, String menuType, String menuUrl,
                           String menuKey, String menuCode, String hasSubMenu, String wechatId) {
        Map<String, String> param = new HashMap<String, String>();
        if ("no".equals(hasSubMenu)) {
            param.put("type", "");
        } else {
            param.put("type", menuType);
        }
        param.put("name", menuName);

        param.put("url", menuUrl);
        param.put("key", menuKey);
        param.put("menuCode", menuCode);
        param.put("hasSubMenu", hasSubMenu);

        menuService.updateMenu(param);

    }

    /**
     * 修改子菜单
     *
     * @param menuName
     * @param menuType
     * @param menuUrl
     * @param menuKey
     * @param menuCode
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/update-submenu")
    @ResponseBody
    public void updateSubMenu(String menuName, String menuType,
                              String menuUrl, String menuKey, String menuCode) {
        Map<String, String> param = new HashMap<String, String>();
        param.put("name", menuName);
        param.put("type", menuType);
        param.put("url", menuUrl);
        param.put("key", menuKey);
        param.put("menuCode", menuCode);
        menuService.updateSubMenu(param);

    }

    /**
     * 创建公众号菜单
     *
     * @param wechatId
     * @return
     * @author Zee
     * @date 2016年11月29日
     */
    @RequestMapping("/submit-menu")
    @ResponseBody
    public JSONObject submitMenu(String wechatId) throws Exception {
        // 查询公众号appID 和APPsercret

        Map<String, Object> wechat = menuService
                .queryWechatInfoById(wechatId);
        JSONObject json = creatWechatMenuService.getWechatAccessToken(
                String.valueOf(wechat.get("app_id")),
                String.valueOf(wechat.get("app_secret")));
        Menu menu = creatWechatMenuService.getMenu(wechatId);
        String result = creatWechatMenuService.createMenu(menu,
                json.getString("access_token"));
        JSONObject jsonObject = JSONObject.parseObject(result);
        return jsonObject;
    }

    /**
     * 修改主菜单是否含有子菜单状态
     *
     * @param hasSubMenu
     * @param menuCode
     * @return
     * @author Zee
     * @date 2016年11月30日
     */
    @RequestMapping("/update-menu-hasSubMenu")
    @ResponseBody
    public String updateMenuHasSubMenu(String hasSubMenu, String menuCode) {
        try {
            menuService.updateMenuHasSubMenu(hasSubMenu, menuCode);
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }
}
